/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controladores;

import Persistencia.PersistenciaUsuario;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.TreeSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import negocio.ComparadorRanking;
import negocio.Paginacion;
import negocio.Tabla;
import negocio.TrucoSuperado;
import negocio.Usuario;

/**
 *
 * @author JAVA
 */
public class ServletUsuario extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        HttpSession sesion = request.getSession();
        Usuario usuario = (Usuario) sesion.getAttribute("usuario");
        if (request.getParameter("opc") != null) {
            if (request.getParameter("opc").equals("cerrar")) {

                sesion.setAttribute("usuario", null);
                sesion.invalidate();
                response.sendRedirect("salida.jsp");
            }
            if (request.getParameter("opc").equals("buscar")) {
                
                ArrayList<Usuario> listaFinal=new ArrayList<Usuario>();
                

                String email = request.getParameter("e-mail");
                String ciudad = request.getParameter("ciudad");
                String estilo = request.getParameter("estilo");
                String nivel = request.getParameter("nivel");
                if ("null".equals(nivel)) {
                    nivel = "";
                }
                String nombre = request.getParameter("nombre");
                if (nombre != null) {
                    listaFinal = PersistenciaUsuario.buscarUsuariosNomYApe(request.getParameter("nombre"));
                 
                 
                } 
                
                if (email != null || ciudad != null || estilo != null || nivel != null) {
                    listaFinal = PersistenciaUsuario.buscarUsuariosOtros(email, ciudad, estilo, nivel);
                 
                 
                }

               
                request.setAttribute("listatodos", listaFinal);
                request.getRequestDispatcher("buscar.jsp").forward(request, response);
            }


            if (request.getParameter("opc").equals("amigos")) {
                ArrayList<Usuario> lista=new ArrayList<Usuario>();
                lista = usuario.getUsuariosQueSigue();
                request.setAttribute("listatodos", lista);
                request.getRequestDispatcher("buscar.jsp").forward(request, response);
            }
            if (request.getParameter("opc").equals("datospersonales")) {
                String passAntigua = request.getParameter("password");
                String passNueva = request.getParameter("password2");
                String passConfirmar = request.getParameter("password3");
                String nombre = request.getParameter("nombre");
                String apellidos = request.getParameter("apellidos");
                String ciudad = request.getParameter("ciudad");
                String edad = request.getParameter("edad");
                String sexo = request.getParameter("sexo");
                String altura = request.getParameter("altura");
                String peso = request.getParameter("peso");
                String estilo = request.getParameter("estilo");

                if (passAntigua != null && passNueva != null && passConfirmar != null) {
                    if (passAntigua.equals(usuario.getPassword()) && passNueva.equals(passConfirmar)) {
                        usuario.setPassword(passNueva);
                        usuario.actualizarUsuario();
                        response.sendRedirect(getServletContext().getContextPath()+"/datosPersonales.jsp");
                    }
                }

                if (nombre != null && apellidos != null && ciudad != null && edad != null && sexo != null && altura != null && peso != null && estilo != null) {

                    if ("".equals(nombre) || "".equals(apellidos) || "".equals(ciudad) || "".equals(edad) || "".equals(sexo) || "".equals(altura) || "".equals(peso) || "".equals(estilo)) {
                        request.setAttribute("datossinrellenar", "");
                        request.getRequestDispatcher("datosPersonales.jsp").forward(request, response);
                    } else {
                        usuario.setNombre(nombre);
                        usuario.setApellidos(apellidos);
                        usuario.setCiudad(ciudad);
                        usuario.setEdad(Integer.parseInt(edad));
                        usuario.setSexo(sexo);
                        usuario.setAltura(Integer.parseInt(altura));
                        usuario.setPeso(Double.parseDouble(peso));
                        usuario.setEstilo(estilo);

                        usuario.actualizarUsuario();
                        response.sendRedirect("datosPersonales.jsp");
                    }
                }
            }
            if (request.getParameter("opc").equals("datosrellenar")) {
                if (request.getParameter("tabla") != null) {
                    String tabla = request.getParameter("tabla");
                    if (!"null".equals(tabla)) {
                        ArrayList<Tabla> listaTablas = usuario.obtenerTablas();
                        for (Tabla t : listaTablas) {
                            if (t.getId() == Integer.parseInt(tabla)) {
                                request.setAttribute("t", t);
                            }
                        }
                    } else {
                        request.setAttribute("t", null);
                    }
                }
                request.getRequestDispatcher("datosPersonales.jsp").forward(request, response);
            }
            if (request.getParameter("opc").equals("datosborrartabla")) {
                int id = Integer.parseInt(request.getParameter("idtabla"));

                ArrayList<Tabla> lista = usuario.getTablas();
                boolean borrar = false;
                Tabla tabla = null;
                for (Tabla t : lista) {
                    if (t.getId() == id) {
                        borrar = true;
                        tabla = t;
                    }
                }
                if (borrar == true) {
                    usuario.eliminarTabla(tabla);
                }
                response.sendRedirect("datosPersonales.jsp");
            }
            if (request.getParameter("opc").equals("datostomatabla")) {
                String marca = request.getParameter("marca");
                String modelo = request.getParameter("modelo");
                String material = request.getParameter("material");
                String rodamientos = request.getParameter("rodamientos");
                String ejes = request.getParameter("ejes");
                String ruedas = request.getParameter("ruedas");
                if (marca != null && modelo != null && material != null && rodamientos != null && ejes != null && ruedas != null) {
                    Tabla t = new Tabla(marca, modelo, material, rodamientos, ejes, ruedas);
                    if (usuario.añadirTabla(t) > 0) {
                        request.setAttribute("tablanueva", null);
                    }
                }
                request.getRequestDispatcher("datosPersonales.jsp").forward(request, response);
            }
            if (request.getParameter("opc").equals("add")) {
                Usuario user = Usuario.obtenerUsuarioId(Integer.parseInt(request.getParameter("id")));
                usuario.seguirUsuario(user);
                response.sendRedirect(getServletContext().getContextPath() + "/perfil.jsp");
            }
            if (request.getParameter("opc").equals("out")) {
                sesion.setAttribute("usuario", null);
                sesion.invalidate();
                response.sendRedirect("index.jsp");
            }
            if (request.getParameter("opc").equals("ver")) {
                int id = Integer.parseInt(request.getParameter("id"));
                Usuario amigo = Usuario.obtenerUsuarioId(id);
                request.setAttribute("amigo", amigo);
                request.getRequestDispatcher("usuario.jsp").forward(request, response);
            }
            if (request.getParameter("opc").equals("addvideo")) {
                TrucoSuperado ts = usuario.obtenerTrucoId(Integer.parseInt(request.getParameter("id")));
                String video = request.getParameter("video");
                if (video.compareTo("")!=0) {
                    ts.setLink(video);
                    usuario.actualizarTrucoSuperado(ts);
                    usuario.compruebaSubirNivel();
                }
                response.sendRedirect(getServletContext().getContextPath() + "/perfil.jsp");
            }
            if(request.getParameter("opc").equals("eliminar")){
                int idAmigo=Integer.parseInt(request.getParameter("id"));
                Usuario usuarioAmigo=Usuario.obtenerUsuarioId(idAmigo);
                usuario.dejarSeguirUsuario(usuarioAmigo);
                response.sendRedirect(getServletContext().getContextPath()+"/perfil.jsp");
            }
            if (request.getParameter("opc").equals("ranking")) {
                int pagina=0;
                Paginacion p=null;
                if(request.getParameter("pagina")!=null){
                    pagina=Integer.parseInt(request.getParameter("pagina"));
                    p=new Paginacion(3,Usuario.contadorUsuarios(),pagina);
                }else{
                    pagina=1;
                    p=new Paginacion(3,Usuario.contadorUsuarios(),pagina);
                }
                TreeSet<Usuario> set = new TreeSet<Usuario>(new ComparadorRanking());
                set.addAll(Usuario.obtenerUsuariosRangingPaginados(p));
                request.setAttribute("setRanking", set);
                request.setAttribute("paginacion", p);

                request.getRequestDispatcher("ranking.jsp").forward(request, response);
            }
            if(request.getParameter("opc").equals("baja")){
                if(request.getParameter("confirm")!=null){
                    if(request.getParameter("confirm").equals("si")){
                        usuario.eliminarUsuario();
                        sesion.invalidate();
                        response.sendRedirect(getServletContext().getContextPath()+"/index.jsp");
                    }
                    if(request.getParameter("confirm").equals("no")){
                        response.sendRedirect(getServletContext().getContextPath()+"/perfil.jsp");
                    }
                }else{
                    response.sendRedirect(getServletContext().getContextPath()+"/baja.jsp");
                }
            }
        }
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();



        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet ServletUsuario</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet ServletUsuario at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
             */
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
